#pragma once

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <assert.h>
#include <memory.h>
#include <stdbool.h>

typedef int DataType;

void IsSorted(DataType* arr, int n);//检查是否有序

void TimeTest(void (*Sort)(DataType*, int), int* arr, int n);//测试函数

void TimeTest2(void (*Sort)(DataType*, int, int), int* arr, int left, int right);//快排测试函数

void TimeTest3(void (*Sort)(void*, size_t, size_t, int (*cmp)(const void*, const void*)), int* arr, int n);//qsort测试函数

int HeapPop(DataType* arr, int* n);//出堆函数

void HeapAdjustDown(DataType* arr, int parent, int n);//向下调整算法

void InsertSort(DataType* arr, int n);//直接插入排序

void ShellSort(DataType* arr, int n);//希尔排序(壳排序)

void HeapSort(DataType* arr, int n);//堆排序

void SelectSort(DataType* arr, int n);//直接选择排序

void BubbleSort(DataType* arr, int n);//冒泡排序

void QuickSort(DataType* arr, int left, int right);//快速排序

void MergeSort(DataType* arr, int n);//归并排序

void CountSort(DataType* arr, int n);//计数排序